package com.kun.rental.controller;

import com.kun.rental.entity.Dept;
import com.kun.rental.entity.Permission;
import com.kun.rental.service.IPermissionService;
import com.kun.rental.utils.Result;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 前端控制器
 * 菜单管理
 * </p>
 *
 * @author ikun
 * @since 2024-07-04
 */
@Api(tags = "菜单管理")
@RestController
@RequestMapping("/rental/permission")
public class PermissionController {

    @Autowired
    private IPermissionService permissionService;

    /**
     * 获取菜单列表
     *
     * @return
     */
    @GetMapping("/selectList")
    public Result selectList() {
        return Result.success(permissionService.selectList());
    }


    /**
     * 新增权限信息。
     * @param permission 权限信息对象，包含了权限的详细信息。
     * @return 如果权限信息保存成功，则返回一个表示成功的Result对象；否则返回一个表示失败的Result对象。
     */
    @PostMapping("/save")
    public Result save(@RequestBody Permission permission) {
        // 判断权限类型是否不为2，即不为菜单类型
        Integer permissionType = permission.getPermissionType();
        if (permissionType != 2) {
            // 如果是URL类型的权限，则解析URL，设置路由名称和路径
            String routeUrl = permission.getRouteUrl();
            if (routeUrl.contains("/")) {
                // 从URL中提取路由名称和路径
                permission.setRouteName(routeUrl.substring(routeUrl.lastIndexOf("/") + 1));
                permission.setRoutePath(routeUrl.substring(routeUrl.lastIndexOf("/")));
            }
        }
        // 调用权限服务保存权限信息，并根据保存结果返回成功或失败的Result对象
        return permissionService.save(permission) ? Result.success() : Result.fail();
    }



    /**
     * 修改菜单
     * @param permission
     * @return
     */
    @PutMapping("/update")
    public Result update(@RequestBody Permission permission) {
        Integer permissionType = permission.getPermissionType();
        if (permissionType!=2){
            String routeUrl = permission.getRouteUrl();// /busi/orderManager/orderList
            if (routeUrl.contains("/")) {
                permission.setRouteName(routeUrl
                        .substring(routeUrl.lastIndexOf("/")+1));
                permission.setRoutePath(routeUrl.substring(routeUrl.lastIndexOf("/")));
            }
        }
        return permissionService.updateById(permission) ? Result.success() : Result.fail();
    }


    /**
     * 删除菜单
     *
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        return permissionService.removeById(id) ? Result.success() : Result.fail();
    }


    /**
     * 判断是否有子菜单
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result hasChildren(@PathVariable Integer id) {
        return permissionService.hasChildren(id) ?
                Result.success().setMessage("有") : Result.success().setMessage("无");
    }


    /**
     * 获取菜单树
     *
     * @return
     */
    @GetMapping("/selectTree")
    public Result tree() {
        return Result.success(permissionService.selectTree());
    }


}
